package anonymus.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import anonymus.excepcion.DAOExcepcion;
import anonymus.modelo.Local;
import anonymus.modelo.Servicio;
import anonymus.modelo.Usuario;
import anonymus.util.ConexionBD;


public class servicioDAO extends BaseDAO{

		public Collection<Servicio> buscarPorNombre(String nombre) throws DAOExcepcion {
			System.out.println("servicioDAO: buscarPorNombre(String nombre)");
			String query = "SELECT codServicio, tipo_servicio, descripcion_servicio, tarifa_servicio FROM Servicio WHERE codServicio like ?";
			Collection<Servicio> lista = new ArrayList<Servicio>();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, "%" + nombre + "%");
				rs = stmt.executeQuery();
				while (rs.next()) {
					Servicio vo = new Servicio();
					vo.setCodServicio(rs.getInt("codServicio"));
					vo.setTipo_servicio(rs.getString("tipo_servicio"));
					vo.setDescripcion_servicio(rs.getString("descripcion_servicio"));
					vo.setTarifa_servicio(rs.getDouble("tarifa_servicio"));
					lista.add(vo);
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return lista;
		}

		
	public void insertar(Servicio vo) throws DAOExcepcion {
			System.out.println("servicioDAO: insertar(Servicio vo)");
			String query = "INSERT INTO Servicio( tipo_servicio, descripcion_servicio, tarifa_servicio ) VALUES (?,?,?)";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, vo.getTipo_servicio());
				stmt.setString(2, vo.getDescripcion_servicio());				
				stmt.setDouble(3, vo.getTarifa_servicio());				
				
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("Que penita, no se pudo insertar jaaa");
							
				}
				
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

	
		public Servicio obtener(String nombre) throws DAOExcepcion {
			System.out.println("servicioDAO: obtener(int codServicio)");
			Servicio vo = new Servicio();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				String query = "select codServicio, tipo_servicio, descripcion_servicio, tarifa_servicio from Servicio where codServicio=?";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, nombre);
				rs = stmt.executeQuery();
				if (rs.next()) {
					vo.setCodServicio(rs.getInt(1));
					vo.setTipo_servicio(rs.getString(2));
					vo.setDescripcion_servicio(rs.getString(3));
					vo.setTarifa_servicio(rs.getDouble(4));
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}

		public void eliminar(int codServicio) throws DAOExcepcion {
			System.out.println("servicioDAO: eliminar(int codServicio)");
			String query = "DELETE FROM Servicio WHERE codServicio=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, codServicio);
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("Chess, no se pudo eliminar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

		public void actualizar(Servicio vo) throws DAOExcepcion {
			System.out.println("servicioDAO: actualizar(Servicio vo)");
			String query = "update Servicio set(tipo_servicio, descripcion_servicio, tarifa_servicio ) VALUES (?,?,?) where codServicio=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, vo.getTipo_servicio());
				stmt.setString(2, vo.getDescripcion_servicio());
				stmt.setDouble(3, vo.getTarifa_servicio());
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("Chess, no se pudo actualizar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

		
	public Collection<Servicio> listado() throws DAOExcepcion {
			System.out.println("servicioDAO: listar()");
			Collection<Servicio> c = new ArrayList<Servicio>();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				con = ConexionBD.obtenerConexion();
				String query = "SELECT codServicio from Servicio";
				stmt = con.prepareStatement(query);
				rs = stmt.executeQuery();
				while (rs.next()) {
					Servicio vo = new Servicio();
					vo.setCodServicio(rs.getInt("codServicio"));
					c.add(vo);
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return c;
		}

	public void insertarLocalServicio(Servicio vo) throws DAOExcepcion {
		System.out.println("servicioDAO: insertar(Servicio vo)");
//		String queryservicio  = "INSERT INTO servicio( tipo_servicio,descripcion_servicio, tarifa_servicio) VALUES (?,?,?)";
		String queryLocalServicio = "INSERT INTO local_has_servicio( local_codLocal, servicio_codServicio) VALUES (?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			
			con = ConexionBD.obtenerConexion();
			
			stmt = con.prepareStatement(queryLocalServicio);
			stmt.setInt(1, ((Local) vo.getLocal()).getCodLocal());
			
			int idp = 0;
            String query = "SELECT LAST_INSERT_ID()";
            stmt = con.prepareStatement(query);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                    idp = (rs.getInt(1) + 1);
            }
            vo.setCodServicio(idp);			
			
			stmt.setInt(2, vo.getCodServicio());


			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Que penita, no se pudo insertar jaaa");
			}
			//ULTIMO CODIGO AUTOGENERADO CREADO

            
			System.out.println("Antes de Insertar Servicio");
			i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Que penita, no se pudo insertar jaaa");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
}
	
	

